package com.mini.grpc.client;

import java.util.concurrent.TimeUnit;

/**
 * ManagedChannel是一个可管理的通道，提供了额外的生命周期管理功能。
 */
public abstract class ManagedChannel implements MiniGrpcChannel {
    
    /**
     * 关闭通道，等待所有正在进行的调用完成
     *
     * @return this
     */
    @Override
    public abstract ManagedChannel shutdown();
    
    /**
     * 立即关闭通道，取消所有正在进行的调用
     *
     * @return this
     */
    public abstract ManagedChannel shutdownNow();
    
    /**
     * 等待通道终止，或者超时
     *
     * @param timeout 超时时间
     * @param unit 时间单位
     * @return 如果通道在超时前终止则返回true，否则返回false
     * @throws InterruptedException 如果等待被中断
     */
    public abstract boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException;
    
    /**
     * 等待通道终止
     *
     * @throws InterruptedException 如果等待被中断
     */
    public abstract void awaitTermination() throws InterruptedException;
} 